<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/*
			   原型(prototype):
			   1.所有的函数会有一个特别的属性 —— prototype
			   2.每个实例对象（object）都有一个私有属性（称之为 __proto__）指向它的构造函数的原型对象（prototype）
			*/

			//构造函数
			function Student(name, age) {
				this.name = name;
				this.age = age;
				/* this.study = function() {
					console.log("学习");
				} */
			}

			//-------------------1Student的实例对象可以正常调用study()方法---------------------------------------------
			var s1 = new Student("张三", 20);
			s1.className = "29期";
			// s1.study();

			var s2 = new Student("李四", 30);
			s2.className = "29期";
			// s2.study();

			//-------------------2验证内存是否申请了两次空间---------------------------------------------
			// console.log(s1.study === s2.study); //false 是

			//-------------------------------原型对象(共享)------------------------------------------------------------------------------------
			//原型对象
			console.dir(Student.prototype);

			Student.prototype.study = function() {
				console.log("学习");
			}

			//-------------------1.放到原型对象上,Student的实例对象还可以正常调用---------------------------------------------
			// s1.study();
			// s2.study();

			//-------------------2验证内存是否申请了两次空间---------------------------------------------
			// console.log(s1.study === s2.study); //true 不是

			Student.prototype.className = "29期";

			// console.log(s1.className, s2.className);
			
			/*
			   对象属性和方法查找机制:
			   1.对象自身查找,有,就直接访问
			   2.如果没有,则到原型对象上查找
			
			*/
		   
		   //-----------------------------proto-----------------------------------------------------------------
		   console.log(s1.__proto__ == Student.prototype);//true
		</script>
	</head>
	<body>
	</body>
</html>
